<# .SYNOPSIS Reads from a UDP socket on a multicast group. .PARAMETER interfaceAddress Local interface address to listen on. Mandatory. .PARAMETER multicastGroup Multicast group. 239.239.239.239 by default. .PARAMETER multicastPort Multicast port. 19190 by default. .PARAMETER maxloops Number of times to read on the socket. Reads a blocking! Default is infinite (0) .EXAMPLE rip-mcast-read -interfaceAddress 192.168.0.1 -multicastGroup 239.239.239.2 -multicastPort 12345 -maxloops 10 #> function rip-mcast-read { [cmdletbinding()] param ( [Parameter(Mandatory=$true)] [string] $interfaceAddress = "127.0.0.1" , [Parameter(Mandatory=$false)] [string] $multicastGroup = "239.239.239.239" , [Parameter(Mandatory=$false)] [uint32] $multicastPort = 19190 , [Parameter(Mandatory=$false)] [uint32] $maxloops = 0 ) write-host $interfaceAddress $localInterfaceEndpoint= [IPAddress]::Parse($interfaceAddress) $endpointToBind = New-Object System.Net.IPEndPoint ([IPAddress]::Any,$multicastPort) $socket = New-Object System.Net.Sockets.Socket([System.Net.Sockets.AddressFamily]::InterNetwork, [System.Net.Sockets.SocketType]::Dgram, [System.Net.Sockets.ProtocolType]::Udp) $socket.Blocking = $false $socket.SetSocketOption([System.Net.Sockets.SocketOptionLevel]::Socket, [System.Net.Sockets.SocketOptionName]::ReuseAddress, 1) $socket.bind($endpointToBind) $socket.SetSocketOption([System.Net.Sockets.SocketOptionLevel]::Socket, [System.Net.Sockets.SocketOptionName]::IpTimeToLive, 32) $multicastOptions = New-Object System.Net.Sockets.MulticastOption( [IPAddress]::Parse($multicastGroup), $localInterfaceEndpoint) write-host Adding multicast membership for $multicastGroup on interface $localInterfaceEndpoint $socket.SetSocketOption([System.Net.Sockets.SocketOptionLevel]::IP , [System.Net.Sockets.SocketOptionName]::AddMembership ,$multicastOptions ) $bytes = New-Object Byte[] 64000 $receivePoint = New-Object System.Net.IPEndPoint ([IPAddress]::Any,$multicastPort) write-host Start reading packets! $nbLoop = 0 while( ($nbLoop -lt $maxloops) -or ($maxloops -eq 0)) { Try { $lengthRead = $socket.Receive($bytes) $b = New-Object Byte[] $lengthRead [array]::copy($bytes,$b, $lengthRead) $s = [System.Text.Encoding]::ASCII.GetString($b) $date = Get-Date write-host $date - $s $nbloop = $nbloop + 1 } Catch { Start-Sleep -m 500 } } write-host Dropping multicast membership for $multicastGroup on interface $localInterfaceEndpoint $socket.SetSocketOption([System.Net.Sockets.SocketOptionLevel]::IP , [System.Net.Sockets.SocketOptionName]::DropMembership ,$multicastOptions ) } <# .SYNOPSIS Writes to a UDP socket on a multicast group. .PARAMETER interfaceAddress Local interface address to write on. Mandatory. .PARAMETER multicastGroup Multicast group. 239.239.239.239 by default. .PARAMETER multicastPort Multicast port. 19190 by default. .PARAMETER maxloops Number of times to write on the socket. Default is infinite (0) .PARAMETER pauseBetweenWrites Time to wait in milliseconds between each write. Defaults to 1000 milliseconds .PARAMETER message String message to write. Defaults to : multicast message test .EXAMPLE rip-mcast-write -interfaceAddress 192.168.0.1 -multicastGroup 239.239.239.2 -multicastPort 12345 -message "abcdefg" #> function rip-mcast-write { [cmdletbinding()] param ( [Parameter(Mandatory=$true)] [string] $interfaceAddress = "" , [Parameter(Mandatory=$false)] [string] $multicastGroup = "239.239.239.239" , [Parameter(Mandatory=$false)] [uint32] $multicastPort = 19190 , [Parameter(Mandatory=$false)] [uint32] $maxloops = 0 , [Parameter(Mandatory=$false)] [uint32] $pauseBetweenWrites = 1000 , [Parameter(Mandatory=$false)] [string] $message= "multicast message test" ) write-host Writing on $interfaceAddress to multicast group $multicastGroup : $multicastPort $localInterfaceEndpoint= [IPAddress]::Parse($interfaceAddress) $endpointToBind = New-Object System.Net.IPEndPoint ([IPAddress]::Any,$multicastPort) $socket = New-Object System.Net.Sockets.Socket([System.Net.Sockets.AddressFamily]::InterNetwork, [System.Net.Sockets.SocketType]::Dgram, [System.Net.Sockets.ProtocolType]::Udp) $socket.SetSocketOption([System.Net.Sockets.SocketOptionLevel]::Socket, [System.Net.Sockets.SocketOptionName]::ReuseAddress, 1) $socket.bind($endpointToBind) $socket.SetSocketOption([System.Net.Sockets.SocketOptionLevel]::Socket, [System.Net.Sockets.SocketOptionName]::IpTimeToLive, 32) $multicastOptions = New-Object System.Net.Sockets.MulticastOption( [IPAddress]::Parse($multicastGroup), $localInterfaceEndpoint) write-host Adding multicast membership for $multicastGroup on interface $localInterfaceEndpoint $socket.SetSocketOption([System.Net.Sockets.SocketOptionLevel]::IP , [System.Net.Sockets.SocketOptionName]::AddMembership ,$multicastOptions ) $multicastEndpoint = New-Object System.Net.IPEndPoint ([IPAddress]::Parse($multicastGroup),$multicastPort) write-host $multicastEndpoint write-host Start wriing packets! $nbLoop = 0 while( ($nbLoop -lt $maxloops) -or ($maxloops -eq 0)) { $bytesToSend = [System.Text.Encoding]::ASCII.GetBytes($message) $nbSent = $socket.SendTo($bytesToSend, $multicastEndpoint) $date = Get-Date write-host $date - $nbSent bytes - $message $nbloop = $nbloop + 1 Start-Sleep -m $pauseBetweenWrites } write-host Dropping multicast membership for $multicastGroup on interface $localInterfaceEndpoint $socket.SetSocketOption([System.Net.Sockets.SocketOptionLevel]::IP , [System.Net.Sockets.SocketOptionName]::DropMembership ,$multicastOptions ) } Write-Host -ForegroundColor Red @" multicast 3.11.2 loaded. (c) Radio IP Software 2015 "@ write-host -ForegroundColor White @" Available functions: rip-mcast-read Reads from a UDP socket on a multicast group. rip-mcast-write Writes a simple string using a UDP socket on a multicast group. "@